#include <bits/stdc++.h>
using namespace std;
#define ll long long
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
    while(isdigit(ch)) x=x*10+(ch^48),ch=getchar();
    return x*f;
}
const int N=2e5+4,inf=1e9;
int n,a0;
struct name{
    int a,h;
}a[N];
struct seg{
    int n;
    ll t[N<<1];
    ll tag;
    void init(int x){
        n=x;
        tag=0;
        for(int i=1;i<n<<1;i++) t[i]=inf;
    }
    void add(int x){tag+=x;}
    void update(int x,ll v){
        v-=tag;
        x+=n-1;
        if(t[x]<v) return;
        t[x]=v;
        for(x>>=1;x;x>>=1)
            t[x]=min(t[x<<1],t[x<<1|1]);
    }
    ll query(int l,int r){
        ll ans=inf;
        for(l+=n-1,r+=n;l<r;l>>=1,r>>=1){
            if(l&1) ans=min(ans,t[l++]);
            if(r&1) ans=min(ans,t[--r]);
        }
        return ans+tag;
    }
}T;

ll get(int m,int v){
    ll ans=inf;
    int l=1,r;
    for(;l<=m;l=r+1){
        r=m/(m/l);
        ans=min(ans,T.query(l,r)+1ll*max(0,(m/l))*v);
    }
    return min(ans,T.query(m+1,2e5));
}
signed main(){
    freopen("xinyue.in","r",stdin);
    freopen("xinyue.out","w",stdout);
    n=read(),a0=read();
    for(int i=1;i<=n;i++) a[i].a=read(),a[i].h=read();
    sort(a+1,a+n+1,[](name xx,name yy){return xx.a==yy.a?xx.h>yy.h:xx.a<yy.a;});
    T.init(2e5);
    T.update(a0,0);
    for(int i=1;i<n;i++){
        int res=get(a[i].h-1,a[i].a);
        T.add(1ll*max(0,(a[i].h-1)/a[n].a)*a[i].a);
        T.update(a[i].a,res);
    }
    cout<<get(a[n].h-1,a[n].a)<<"\n";
    cerr<<clock();
    return 0;
}   